package br.com.viewcar.entity;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.annotations.Type;

import com.vividsolutions.jts.geom.Point;

@Entity
@Table(name="HISTORICO_TRANSMISSAO", schema = "CHECKROTA")
@NamedQueries({
    @NamedQuery(name = "HistoricoTransmissao.findByVeiculo", 
    		query = "SELECT p FROM HistoricoTransmissao p WHERE p.ponto.id != 0 AND p.veiculoId = ?  AND p.dataTransmissao between ? AND ? ORDER BY p.dataTransmissao"),
	@NamedQuery(name = "HistoricoTransmissao.findByVeiculoVelocidade",	
			query = "SELECT p FROM HistoricoTransmissao p WHERE p.ponto.id != 0 AND p.veiculoId = ?  AND p.dataTransmissao between ? AND ? AND p.velocidade >= ? ORDER BY p.dataTransmissao")
})
public class HistoricoTransmissao implements Serializable {

	private static final long serialVersionUID = 9048294011474844463L;

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name="ID", nullable = false)
	private Long id;

	@Column(name="GEOMPONTO", nullable = false)
	@Type(type="org.hibernatespatial.GeometryUserType")
	private Point geometry;

	@Temporal(TemporalType.TIMESTAMP)
	@Column(name="DATA_TRANSMISSAO", nullable = false)
	private Date dataTransmissao;

	@Column(name="DIST_PONTO", nullable = false)
	private Float distancia;

	@Column(name="STA_PANICO")
	private Boolean statusPanico;

	@Column(name="STA_IGNICAO")
	private Boolean statusIgnicao;

	@Column(name="STA_ENTRADA2")
	private Boolean statusEntrada2;

	@Column(name="STA_ENTRADA3")
	private Boolean statusEntrada3;

	@Column(name="STA_ENTRADA4")
	private Boolean statusEntrada4;

	@Column(name="ENTRADA2")
	private Short valorEntrada2;

	@Column(name="ENTRADA3")
	private Short valorEntrada3;

	@Column(name="ENTRADA4")
	private Short valorEntrada4;

	@Column(name="VELOCIDADE")
	private Float velocidade;

	@Column(name="TEMPERATURA")
	private Float temperatura;

	@Column(name="ODOMETRO")
	private Float odometro;

	@Column(name="ID_VEICULO")
	private Integer veiculoId;

	@ManyToOne
	@JoinColumn(name="ID_PONTO")
	private Ponto ponto;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public Point getGeometry() {
		return geometry;
	}

	public void setGeometry(Point geometry) {
		this.geometry = geometry;
	}

	public Date getDataTransmissao() {
		return dataTransmissao;
	}

	public void setDataTransmissao(Date dataTransmissao) {
		this.dataTransmissao = dataTransmissao;
	}

	public Float getDistancia() {
		return distancia;
	}

	public void setDistancia(Float distancia) {
		this.distancia = distancia;
	}

	public Boolean getStatusPanico() {
		return statusPanico;
	}

	public void setStatusPanico(Boolean statusPanico) {
		this.statusPanico = statusPanico;
	}

	public Boolean getStatusIgnicao() {
		return statusIgnicao;
	}

	public void setStatusIgnicao(Boolean statusIgnicao) {
		this.statusIgnicao = statusIgnicao;
	}

	public Boolean getStatusEntrada2() {
		return statusEntrada2;
	}

	public void setStatusEntrada2(Boolean statusEntrada2) {
		this.statusEntrada2 = statusEntrada2;
	}

	public Boolean getStatusEntrada3() {
		return statusEntrada3;
	}

	public void setStatusEntrada3(Boolean statusEntrada3) {
		this.statusEntrada3 = statusEntrada3;
	}

	public Boolean getStatusEntrada4() {
		return statusEntrada4;
	}

	public void setStatusEntrada4(Boolean statusEntrada4) {
		this.statusEntrada4 = statusEntrada4;
	}

	public Short getValorEntrada2() {
		return valorEntrada2;
	}

	public void setValorEntrada2(Short valorEntrada2) {
		this.valorEntrada2 = valorEntrada2;
	}

	public Short getValorEntrada3() {
		return valorEntrada3;
	}

	public void setValorEntrada3(Short valorEntrada3) {
		this.valorEntrada3 = valorEntrada3;
	}

	public Short getValorEntrada4() {
		return valorEntrada4;
	}

	public void setValorEntrada4(Short valorEntrada4) {
		this.valorEntrada4 = valorEntrada4;
	}

	public Float getVelocidade() {
		return velocidade;
	}

	public void setVelocidade(Float velocidade) {
		this.velocidade = velocidade;
	}

	public Float getTemperatura() {
		return temperatura;
	}

	public void setTemperatura(Float temperatura) {
		this.temperatura = temperatura;
	}

	public Float getOdometro() {
		return odometro;
	}

	public void setOdometro(Float odometro) {
		this.odometro = odometro;
	}

	public Integer getVeiculoId() {
		return veiculoId;
	}

	public void setVeiculoId(Integer veiculoId) {
		this.veiculoId = veiculoId;
	}

	public Ponto getPonto() {
		return ponto;
	}

	public void setPonto(Ponto ponto) {
		this.ponto = ponto;
	}

	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		return result;
	}

	public boolean equals(Object obj) {

		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		HistoricoTransmissao other = (HistoricoTransmissao) obj;
		return ((id == null && other.id == null) || (id != null && id.equals(other.id)));
	}
}